package org.example.campusforum.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 用户实体类
 *
 * 对应数据库中的user表，用于存储校园论坛中的用户信息。
 * 包含用户的基本信息、账户状态、权限等级等字段。
 * 支持用户注册、登录、信息修改、权限管理等功能。
 *
 * @author CampusForum Team
 * @version 1.0
 * @since 2024
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("user")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 用户主键ID
     * 数据库自增长字段，唯一标识一个用户
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 用户邮箱地址
     * 作为用户名使用，用于登录验证，必须唯一
     */
    private String email;

    /**
     * 用户登录密码
     * 存储用户的登录密码，建议加密存储
     */
    private String password;

    /**
     * 用户昵称
     * 用户在论坛中显示的名称，可以修改
     */
    private String nickname;

    /**
     * 用户头像URL
     * 存储用户头像图片的链接地址，可为空
     */
    private String avatar;

    /**
     * 用户性别
     * 0: 男性
     * 1: 女性
     * 可为空，用户可选择不填写
     */
    private Integer sex;

    /**
     * 用户年龄
     * 用户的年龄信息，可为空
     */
    private Integer age;

    /**
     * 用户个性签名
     * 用户自定义的个性签名，展示在个人资料中
     */
    private String signature;

    /**
     * 账户创建时间
     * 记录用户注册的时间，数据库默认为当前时间
     */
    private LocalDateTime createTime;

    /**
     * 账户更新时间
     * 记录用户信息最后一次修改的时间，数据库自动更新
     */
    private LocalDateTime updateTime;

    /**
     * 用户账户状态
     * 0: 正常状态 - 用户可正常使用所有功能
     * 1: 禁言状态 - 用户无法发表文章和评论
     * 2: 封禁状态 - 用户无法登录和使用任何功能
     */
    private Integer status;

    /**
     * 用户权限等级
     * 0: 普通用户 - 基础功能权限
     * 1: 管理员 - 内容管理权限
     * 2: 超级管理员 - 系统管理权限
     */
    private Integer privilege;

    /**
     * 逻辑删除标识
     * 0: 正常状态 - 账户正常存在
     * 1: 已删除 - 账户已被逻辑删除，无法登录
     */
    private Integer isDeleted;
}
